const {Sequelize,DataTypes} = require('sequelize');

const sequelize = new Sequelize('traveldb_demo','root','123456',{
    host:'localhost',
    dialect:'mysql',
    port:3306
});

const initUserModel = require('./models/user');
const initJingdianModel = require('./models/jingdian');
const initTicketModel = require('./models/ticket');
const initIndentModel = require('./models/indent');
const initArticleModel = require('./models/article');
const initCommentModel = require('./models/comment');

const User = initUserModel(sequelize, DataTypes);
const Indent = initIndentModel(sequelize, DataTypes);
const Ticket = initTicketModel(sequelize, DataTypes);
const Comment = initCommentModel(sequelize, DataTypes);
const Jingdian = initJingdianModel(sequelize, DataTypes);
const Article = initArticleModel(sequelize, DataTypes);
// 定义表之间的关系
// 用户和门票的关系 (一个用户可以有多个门票)
User.hasMany(Ticket, { foreignKey: 'uid', as: 'tickets' });
Ticket.belongsTo(User, { foreignKey: 'uid', as: 'user' });

// 门票和景点的关系 (一个门票只能对应一个景点)
Ticket.belongsTo(Jingdian, { foreignKey: 'jid', as: 'jingdian' });
Jingdian.hasMany(Ticket, { foreignKey: 'jid', as: 'tickets' });

// 评论和景点的关系 (一个景点可以有多个评论)
Jingdian.hasMany(Comment, { foreignKey: 'jid', as: 'comments' });
Comment.belongsTo(Jingdian, { foreignKey: 'jid', as: 'jingdian' });

// 评论和用户的关系 (一个用户可以有多个评论)
User.hasMany(Comment, { foreignKey: 'uid', as: 'comments' });
Comment.belongsTo(User, { foreignKey: 'uid', as: 'user' });

// 评论和文章的关系 (一个文章可以有多个评论)
Article.hasMany(Comment, { foreignKey: 'aid', as: 'comments' });
Comment.belongsTo(Article, { foreignKey: 'aid', as: 'article' });

// 订单和用户的关系 (一个用户可以有多个订单)
User.hasMany(Indent, { foreignKey: 'uid', as: 'indents' });
Indent.belongsTo(User, { foreignKey: 'uid', as: 'user' });

// 订单和门票的关系 (一个订单对应一个门票)
Indent.belongsTo(Ticket, { foreignKey: 'tid', as: 'ticket' });
Ticket.hasMany(Indent, { foreignKey: 'tid', as: 'indents' });

// 订单和景点的关系 (一个订单对应一个景点)
Indent.belongsTo(Jingdian, { foreignKey: 'jid', as: 'jingdian' });
Jingdian.hasMany(Indent, { foreignKey: 'jid', as: 'indents' });

// 导出所有模型
module.exports = {
    sequelize,
    DataTypes,
    User,
    Jingdian,
    Indent,
    Comment,
    Article,
    Ticket, 
};
